﻿using System;
using System.Data;
using DevExpress.XtraSpreadsheet;

namespace QL_Truong_Hoc.Export
{
    public class clsDSKiemTraKetThucMonNghe
    {
        //Data table đầu vào cần có những trường sau:
        //hs_hodem;            'họ đệm
        //hs_ten;              'tên
        //hs_ngaysinh;         'ngày sinh

        public struct stSetting
        {
            public string strKhoa;
            public string strKhoas;
            public string strLop;
            public string strMon;

        }

        private string mcstrTemplate = Environment.CurrentDirectory + @"\Templates\Mau 15.2_Danh sach hs kiem tra ket thuc mon hoc.xls";

        public clsDSKiemTraKetThucMonNghe()
        {
        }

        /// <summary>
        /// Thực hiện xuất ra file excel.
        /// File template là file đã định sẵn.
        /// </summary>
        /// <param name="objData">Dữ liệu đưa vào file word</param>
        public bool fncExport(DataTable objData)
        {
            bool blnResult = false;

            try
            {
                //get data
                SpreadsheetControl objExcel = new SpreadsheetControl();
                objExcel.LoadDocument(mcstrTemplate);

                //xExport(objExcel, objData, false);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }

        /// <summary>
        /// Thực hiện xuất ra file excel.
        /// </summary>
        /// <param name="SpreadsheetControl">excel word</param>
        /// <param name="objData">Dữ liệu đầu vào</param>
        /// <param name="blnShowMergedData">Có hiện dữ liệu đã xuất ngay trên control không?</param>
        /// <returns></returns>
        public bool fncExport(SpreadsheetControl objExcelControl, clsDSKiemTraKetThucMonNghe.stSetting stOption, DataTable objData, bool blnShowMergedData = false)
        {
            bool blnResult = false;

            try
            {
                //get data
                return xExport(objExcelControl, stOption, objData, blnShowMergedData);
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }

        /// <summary>
        /// Phương thức cơ sở thực hiện mail merge
        /// </summary>
        /// <param name="objExcelControl">control excel</param>
        /// <param name="objData">dữ liệu vào</param>
        /// <param name="blnShowMergedData">có xem kết quả không?</param>
        /// <returns></returns>
        private bool xExport(SpreadsheetControl objExcelControl, stSetting stOption, DataTable objData, bool blnShowMergedData = false)
        {
            bool blnResult = false;

            try
            {
                if (objData == null) return false;

                if (!System.IO.File.Exists(mcstrTemplate))
                {
                    clsCommon.fncMsgWarning("Không tìm thấy tệp tin mẫu.");
                    return false;
                }

                objExcelControl.LoadDocument(mcstrTemplate);

                //export
                string strHoDem;
                string strTen;
                DateTime dtNgaySinh;

                int intCurrentRow = 11;
                int intCurrentCol = 0;

                //tạo n dong moi.
                if (objData.Rows.Count > 3)
                {
                    objExcelControl.ActiveWorksheet.Rows.Insert(13, objData.Rows.Count - 3);

                    //(12 + objData.Rows.Count - 2) -> bắt đầu tính từ dòng 12 + (Số bản ghi - 1 là 2 dòng đầu tiên bị nhảy qua + 1 dòng cuối ko copy format)
                    objExcelControl.ActiveWorksheet.Range["A14:I" + (12 + objData.Rows.Count - 3)].CopyFrom(objExcelControl.ActiveWorksheet.Range["A13:I13"]);
                }

                //fill header
                objExcelControl.ActiveWorksheet.Cells["A3"].Value = string.Format("KHOA {0}", stOption.strKhoa.ToUpper());
                objExcelControl.ActiveWorksheet.Cells["A7"].Value = string.Format("Lớp : {0}     Khóa {1}", stOption.strLop, stOption.strKhoas);
                objExcelControl.ActiveWorksheet.Cells["A8"].Value = string.Format("Mô đun / môn học: {0}     Tổng số giờ học:      (LT:        ,TH:    , KT:      )", stOption.strMon);

                for (int i = 0; i <= objData.Rows.Count - 1; i++)
                {
                    //lay data
                    strHoDem = clsCommon.fncCnvNullToString(objData.Rows[i]["hs_hodem"]);
                    strTen = clsCommon.fncCnvNullToString(objData.Rows[i]["hs_ten"]);
                    dtNgaySinh = clsCommon.fncCnvNullToDatetime(objData.Rows[i]["hs_ngaysinh"]);

                    //set cell
                    intCurrentCol = 0; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = i + 1;
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strHoDem;
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strTen;
                    intCurrentCol++; if (dtNgaySinh > DateTime.MinValue) objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = dtNgaySinh.ToString("dd/MM/yyyy");

                    intCurrentRow++;
                }

                ////file to save
                //SaveFileDialog dlgSave = new SaveFileDialog();
                //dlgSave.Filter = "Excel (*.xls)|*.xls|All files (*.*)|*.*";
                //dlgSave.FilterIndex = 1;
                //dlgSave.RestoreDirectory = true;

                ////export word
                //objExcelControl.SaveDocument(dlgSave.FileName, DocumentFormat.Xls);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }
    }
}